#if !defined(__DISPATCHEUR_AUDIO_H)
#define __DISPATCHEUR_AUDIO_H

#include "audio.h"
#include "son.h"
#include "evenement_audio.h"
#include "lecture_son.h"
#include "commun/instantane_du_piano.h"
#include <vector>

/**
 * Classe responsable de recevoir des instantanés et de délivrer les prochains
 * événements.
 */
struct dispatcheur_audio : dependant_de<audio> {
	typedef temps::type_temps type_temps;
private:
	std::vector<evenement_audio> evenements_;
	instantane_du_piano instantane_courant_;
	type_temps latence_voulue_;
public:
	dispatcheur_audio(type_temps latence_voulue) throw();	
	~dispatcheur_audio() throw() {}
	
	void deposer(instantane_du_piano &i);	
	bool sons_a_jouer() { return !evenements_.empty(); }
	lecture_son prochain_son_a_jouer();
	type_temps moment_prochain_son_a_jouer() { return evenements_.empty() ? temps::temps_invalide : evenements_.back().date(); }
	void oublier_prochain_son() { evenements_.pop_back(); }
};

#endif
